﻿using System;
using System.Collections.Generic;
using System.Text;

namespace Gargoyle.ZZT
{
    static class LanguageList
    {
        public static Language ZZT()
        {
            Language result = new Language();

            // cheats
            result.AddCheat("AMMO", Cheats.Ammo);
            result.AddCheat("DARK", Cheats.Dark);
            result.AddCheat("GEMS", Cheats.Gems);
            result.AddCheat("HEALTH", Cheats.Health);
            result.AddCheat("KEYS", Cheats.Keys);
            result.AddCheat("TIME", Cheats.Time);
            result.AddCheat("TORCHES", Cheats.Torches);
            result.AddCheat("ZAP", Cheats.Zap);

            // commands
            result.AddCommand("BECOME", Commands.Become);
            result.AddCommand("BIND", Commands.Bind);
            result.AddCommand("CHANGE", Commands.Change);
            result.AddCommand("CHAR", Commands.Char);
            result.AddCommand("CLEAR", Commands.Clear);
            result.AddCommand("CYCLE", Commands.Cycle);
            result.AddCommand("DIE", Commands.Die);
            result.AddCommand("END", Commands.End);
            result.AddCommand("ENDGAME", Commands.EndGame);
            result.AddCommand("GIVE", Commands.Give);
            result.AddCommand("GO", Commands.Go);
            result.AddCommand("IDLE", Commands.Idle);
            result.AddCommand("IF", Commands.If);
            result.AddCommand("LOCK", Commands.Lock);
            result.AddCommand("PLAY", Commands.Play);
            result.AddCommand("PUT", Commands.Put);
            result.AddCommand("RESTART", Commands.Restart);
            result.AddCommand("RESTORE", Commands.Restore);
            result.AddCommand("SEND", Commands.Send);
            result.AddCommand("SET", Commands.Set);
            result.AddCommand("SHOOT", Commands.Shoot);
            result.AddCommand("TAKE", Commands.Take);
            result.AddCommand("THEN", Commands.Then);
            result.AddCommand("THROWSTAR", Commands.ThrowStar);
            result.AddCommand("TRY", Commands.Try);
            result.AddCommand("UNLOCK", Commands.Unlock);
            result.AddCommand("WALK", Commands.Walk);
            result.AddCommand("ZAP", Commands.Zap);

            // targets
            result.AddTarget("ALL", Targets.All);
            result.AddTarget("OTHERS", Targets.Others);
            result.AddTarget("SELF", Targets.Self);

            // conditions
            result.AddCondition("ALLIGNED", Conditions.Alligned);
            result.AddCondition("ANY", Conditions.Any);
            result.AddCondition("BLOCKED", Conditions.Blocked);
            result.AddCondition("CONTACT", Conditions.Contact);
            result.AddCondition("ENERGIZED", Conditions.Energized);
            result.AddCondition("NOT", Conditions.Not);

            // directions
            result.AddDirection("CW", Directions.Clockwise);
            result.AddDirection("CCW", Directions.CounterClockwise);
            result.AddDirection("E", Directions.East);
            result.AddDirection("EAST", Directions.East);
            result.AddDirection("FLOW", Directions.Flow);
            result.AddDirection("I", Directions.Idle);
            result.AddDirection("IDLE", Directions.Idle);
            result.AddDirection("N", Directions.North);
            result.AddDirection("NORTH", Directions.North);
            result.AddDirection("OPP", Directions.Opp);
            result.AddDirection("RND", Directions.Rnd);
            result.AddDirection("RNDNE", Directions.RndNE);
            result.AddDirection("RNDNS", Directions.RndNS);
            result.AddDirection("RNDP", Directions.RndP);
            result.AddDirection("S", Directions.South);
            result.AddDirection("SOUTH", Directions.South);
            result.AddDirection("SEEK", Directions.Seek);
            result.AddDirection("W", Directions.West);
            result.AddDirection("WEST", Directions.West);

            // items
            result.AddItem("AMMO", Items.Ammo);
            result.AddItem("GEMS", Items.Gems);
            result.AddItem("HEALTH", Items.Health);
            result.AddItem("SCORE", Items.Score);
            result.AddItem("TIME", Items.Time);
            result.AddItem("TORCHES", Items.Torches);

            return result;
        }

        public static Language SuperZZT()
        {
            Language result = new Language();

            // cheats
            result.AddCheat("AMMO", Cheats.Ammo);
            result.AddCheat("GEMS", Cheats.Gems);
            result.AddCheat("HEALTH", Cheats.Health);
            result.AddCheat("KEYS", Cheats.Keys);
            result.AddCheat("NOZ", Cheats.NoStones);
            result.AddCheat("TIME", Cheats.Time);
            result.AddCheat("Z", Cheats.Stones);
            result.AddCheat("ZAP", Cheats.Zap);

            // commands
            result.AddCommand("BECOME", Commands.Become);
            result.AddCommand("BIND", Commands.Bind);
            result.AddCommand("CHANGE", Commands.Change);
            result.AddCommand("CHAR", Commands.Char);
            result.AddCommand("CLEAR", Commands.Clear);
            result.AddCommand("CYCLE", Commands.Cycle);
            result.AddCommand("DIE", Commands.Die);
            result.AddCommand("END", Commands.End);
            result.AddCommand("ENDGAME", Commands.EndGame);
            result.AddCommand("GIVE", Commands.Give);
            result.AddCommand("GO", Commands.Go);
            result.AddCommand("IDLE", Commands.Idle);
            result.AddCommand("IF", Commands.If);
            result.AddCommand("LOCK", Commands.Lock);
            result.AddCommand("PLAY", Commands.Play);
            result.AddCommand("PUT", Commands.Put);
            result.AddCommand("RESTART", Commands.Restart);
            result.AddCommand("RESTORE", Commands.Restore);
            result.AddCommand("SEND", Commands.Send);
            result.AddCommand("SET", Commands.Set);
            result.AddCommand("SHOOT", Commands.Shoot);
            result.AddCommand("TAKE", Commands.Take);
            result.AddCommand("THEN", Commands.Then);
            result.AddCommand("THROWSTAR", Commands.ThrowStar);
            result.AddCommand("TRY", Commands.Try);
            result.AddCommand("UNLOCK", Commands.Unlock);
            result.AddCommand("WALK", Commands.Walk);
            result.AddCommand("ZAP", Commands.Zap);

            // targets
            result.AddTarget("ALL", Targets.All);
            result.AddTarget("OTHERS", Targets.Others);
            result.AddTarget("SELF", Targets.Self);

            // conditions
            result.AddCondition("ALLIGNED", Conditions.Alligned);
            result.AddCondition("ANY", Conditions.Any);
            result.AddCondition("BLOCKED", Conditions.Blocked);
            result.AddCondition("CONTACT", Conditions.Contact);
            result.AddCondition("ENERGIZED", Conditions.Energized);
            result.AddCondition("NOT", Conditions.Not);

            // directions
            result.AddDirection("CW", Directions.Clockwise);
            result.AddDirection("CCW", Directions.CounterClockwise);
            result.AddDirection("E", Directions.East);
            result.AddDirection("EAST", Directions.East);
            result.AddDirection("FLOW", Directions.Flow);
            result.AddDirection("I", Directions.Idle);
            result.AddDirection("IDLE", Directions.Idle);
            result.AddDirection("N", Directions.North);
            result.AddDirection("NORTH", Directions.North);
            result.AddDirection("OPP", Directions.Opp);
            result.AddDirection("RND", Directions.Rnd);
            result.AddDirection("RNDNE", Directions.RndNE);
            result.AddDirection("RNDNS", Directions.RndNS);
            result.AddDirection("RNDP", Directions.RndP);
            result.AddDirection("S", Directions.South);
            result.AddDirection("SOUTH", Directions.South);
            result.AddDirection("SEEK", Directions.Seek);
            result.AddDirection("W", Directions.West);
            result.AddDirection("WEST", Directions.West);

            // items
            result.AddItem("AMMO", Items.Ammo);
            result.AddItem("GEMS", Items.Gems);
            result.AddItem("HEALTH", Items.Health);
            result.AddItem("SCORE", Items.Score);
            result.AddItem("TIME", Items.Time);
            result.AddItem("Z", Items.Stones);

            return result;
        }
    }
}
